package com.gitee.zhuyb;

import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @version 1.0.0
 * @Description: #redis测试
 * @Date: 2021/11/27 12:07
 * @Copyright (C) ZhuYouBin
 */
public class RedisTest {

    @Test
    public void redis01() {
        // 1、创建jedis连接对象
        Jedis jedis = new Jedis("192.168.78.88", 6379);
        // 2、具体操作
        String ping = jedis.ping(); // 测试redis是否连接成功
        System.out.println("ping: " + ping);
        // 3、关闭jedis连接
        jedis.close();
    }

    /** jedis操作Zset */
    @Test
    public void redis07() {
        // 1、创建jedis连接对象
        Jedis jedis = new Jedis("192.168.78.88", 6379);

        // 2、具体操作
        Long zadd = jedis.zadd("k1", 100, "v100"); // 添加单个元素
        Map<String, Double> map = new HashMap<>();
        map.put("v100", 100.0);
        map.put("v200", 200.0);
        map.put("v300", 300.0);
        Long zadd1 = jedis.zadd("k2", map); // 添加多个元素
        Long k1 = jedis.zcount("k1", 100, 500); // 计算个数
        Long zrank = jedis.zrank("k1", "v200"); // 返回排名
        Set<String> zrange = jedis.zrange("k1", 0, -1); // 获取元素
        Long zrem = jedis.zrem("k1", "v300"); // 删除元素

        // 3、关闭jedis连接
        jedis.close();
    }

    /** jedis操作Hash */
    @Test
    public void redis06() {
        // 1、创建jedis连接对象
        Jedis jedis = new Jedis("192.168.78.88", 6379);

        // 2、具体操作
        Long hset = jedis.hset("k1", "f1", "v100");// 设置一个key-value
        String mset = jedis.mset("k3", "f1", "v100", "f2", "v200"); // 设置多个元素
        Map<String, String> map = new HashMap<>();
        map.put("f1", "v100");
        map.put("f2", "v200");
        map.put("f3", "v300");
        Long hset1 = jedis.hset("k2", map); // 设置多个元素
        String hget = jedis.hget("k1", "f1"); // 获取该集合中field对应的value值
        Set<String> hkeys = jedis.hkeys("k2"); // 获取所有键
        List<String> hvals = jedis.hvals("k2"); // 获取所有value值
        Boolean hexists = jedis.hexists("k1", "f3"); // 判断是否存在某个键

        // 3、关闭jedis连接
        jedis.close();
    }

    /** jedis操作Set */
    @Test
    public void redis05() {
        // 1、创建jedis连接对象
        Jedis jedis = new Jedis("192.168.78.88", 6379);

        // 2、具体操作
        Long sadd = jedis.sadd("k1", "set_0001", "set_0002", "set_003"); // 添加元素
        Long sadd2 = jedis.sadd("k2", "set_0002", "set_0003", "set_004"); // 添加元素
        Set<String> smembers = jedis.smembers("k1"); // 查看所有元素
        Boolean sismember = jedis.sismember("k1", "set_0005"); // 判断是否包含某个元素
        Long scard = jedis.scard("k1"); // 查看元素个数
        Long srem = jedis.srem("k1", "set_0001"); // 删除元素
        String spop = jedis.spop("k1"); // 随机获取一个元素
        List<String> srandmember = jedis.srandmember("k1", 2); // 随机获取2个元素
        Set<String> sunion = jedis.sunion("k1", "k2"); // 获取并集

        // 3、关闭jedis连接
        jedis.close();
    }

    /** jedis操作List */
    @Test
    public void redis04() {
        // 1、创建jedis连接对象
        Jedis jedis = new Jedis("192.168.78.88", 6379);

        // 2、具体操作
        Long lpush = jedis.lpush("k1", "list_0001"); // 左边插入单个元素
        Long lpush2 = jedis.lpush("k1", "list_0001", "list_0002", "list_0003"); // 左边插入多个元素
        Long rpush = jedis.rpush("k2", "list_0001"); // 右边插入单个元素
        Long rpush2 = jedis.rpush("k2", "list_0001", "list_0002", "list_0003"); // 右边插入多个元素
        String k1 = jedis.lpop("k1"); // 左边获取一个元素
        String k4 = jedis.rpop("k2"); // 右边获取一个元素
        Long llen = jedis.llen("k1"); // 获取元素个数
        String lindex = jedis.lindex("k1", 2); // 获取指定索引处的元素

        // 3、关闭jedis连接
        jedis.close();
    }

    /** jedis操作key */
    @Test
    public void redis02() {
        // 1、创建jedis连接对象
        Jedis jedis = new Jedis("192.168.78.88", 6379);

        // 2、具体操作
        Set<String> keys = jedis.keys("*"); // 查看所有key
        System.out.println(keys);
        Boolean exists = jedis.exists("k1"); // 判断key是否存在
        System.out.println(exists);
        String type = jedis.type("k2"); // 判断key类型
        System.out.println(type);
        Long del = jedis.del("k3"); // 删除key
        System.out.println(del);
        Long unlink = jedis.unlink("k4"); // 非阻塞删除key
        System.out.println(unlink);
        Long dbSize = jedis.dbSize(); // 查看库大小
        System.out.println(dbSize);
        String select = jedis.select(8); // 切换库
        System.out.println(select);
        String flushDB = jedis.flushDB(); // 清空当前库
        System.out.println(flushDB);
        String flushAll = jedis.flushAll(); // 清空所有库
        System.out.println(flushAll);

        // 3、关闭jedis连接
        jedis.close();
    }

    /** jedis操作string */
    @Test
    public void redis03() {
        // 1、创建jedis连接对象
        Jedis jedis = new Jedis("192.168.78.88", 6379);
        // 2、具体操作
        String rtn = jedis.set("k1", "str001"); // 设置key-value
        String k1 = jedis.get("k1"); // 获取key
        System.out.println(k1);
        Long append = jedis.append("k1", "_append"); // 追加内容
        System.out.println(append);
        Long strlen = jedis.strlen("k1"); // 获取value长度
        System.out.println(strlen);
        Long setnx = jedis.setnx("k1", "str_002"); // 设置key-value，当key不存在时候，才会设置key的值
        System.out.println(setnx);
        String mset = jedis.mset("k1", "v100", "k2", "v200"); // 多个key-value设置
        System.out.println(mset);
        List<String> mget = jedis.mget("k1", "k2"); // 获取多个key的value
        System.out.println(mget);

        // 3、关闭jedis连接
        jedis.close();
    }

}
